Image processing is critical to many computer-related endeavors, such as the display of graphics received over a network, or rendering of an image from a file of image data. Quite often image data is stored or received in a form that requires transformation prior to rendering. For example, image data may have to be scaled, decompressed and so on before it is in the format appropriate for the rendering entity. The process by which image data is received, transformed, and rendered is referred to as the “image pipeline” or “image rendering pipeline.”
In an object-oriented environment, the pipeline is made up of a series of source and sink objects that accomplish the desired transformations. For example, compressed image data may be received from a network connection by a decoder object, which acts as an image data source for the subsequent object in the image-rendering pipeline. The subsequent object, or “sink”, could perform for example an encoding or scale transformation function, and might in turn act as an image data source for another object further along in the pipeline.
Traditionally, the image rendering pipeline components have been constructed to utilize a “pull” architecture. In general pull technologies essentially entail a data consumer specifically requesting information from a particular data provider. Downloading a Web page with a Web browser is a high level example of the use of pull technology. In the context of the image rendering pipeline, the use of pull technology generally means that a transaction between a data source and a data sink is driven by the data sink rather than the data source. Thus in the pipeline example above, the sink would specifically request the image data from the source, which is a decoder in this example. If the source does not currently have the data being requested, due for example to a delay on the network connection, then a potentially protracted waiting condition could occur. Another drawback to the use of pull technology is excess memory usage; at any given point in time, the sink is not necessarily aware of the image data currently possessed by the source, and consequently cannot know exactly when to ask for a particular item of data. Consequently, the source will generally store its received data at least until it receives a request for the data from the sink.
Pull technology may be contrasted with “push” technology. The term “push” technology refers to a data distribution technology in which selected data is delivered from a data source to a data sink at a time and in a manner determined by the source rather than the sink. Again using the Internet as a high level example, PointCast is a service which uses push technology. PointCast was an early provider of a service capable of delivering a selection of news and stock quotes to a user's computer at certain intervals without a contemporaneous request for the data.
While there exist image rendering pipeline technologies that utilize push architecture, these technologies do not utilize the full potential of push technology because they lack a mechanism for optimizing the particular image data transfer parameters as a function of the needs and capabilities of both the source and sink.